LEMP
Linux + Engine X + MySQL + PHP
O Nginx foi se tornando popular como proxy cache e também por ser um servidor HTTP completo. Seu principal destaque é ser muito mais rápido e leve que o Apache. Neste artigo veremos como configurar um sistema de desenvolvimento com ele.
Atualização do Sistema
sudo apt update && sudo apt upgrade
Instalação do Nginx
Instalação da versão mais completa do Nginx:
sudo apt install nginx-extras
Instalação do MySQL
sudo apt install mysql-client mysql-server
Instalação do PHP
Instalação do PHP-FPM e módulos mais recomendados:
sudo apt install \
php-fpm \
php-pear \
php-auth \
php-imagick \
php-gettext \
php-gd \
php-mysql \
php-mbstring \
php-imap \
php-cgi \
php-intl \
php-pspell \
php-recode \
php-sqlite3 \
php-tidy \
php-xmlrpc \
php-xsl \
php-zip \
php-curl \
php-mcrypt \
php-geoip \
php-apcu \
php-memcached \
php7.0-opcache \
php-codesniffer
Pacotes Extras
Há alguns pacotes você irá precisar no decorrer do tempo:
sudo apt install \
curl \
mcrypt \
geoip-database-contrib \
composer \
npm \
git \
sqlite3 \
memcached \
imagemagick
Extra
Quando estou desenvolvendo, prefiro utilizar um servidor local, na mesma máquina. Porém, nem sempre ligo o computador apenas para trabalhar. Então acho mais eficaz deixar o LEMP desabilitado na inicialização, para manter o boot mais rápido e ocupar menos recursos do sistema.
Para isso, podemos desabilitar o Nginx, o MySQL e o PHP-FPM:
sudo systemctl disable nginx.service
sudo systemctl disable mysql.service
sudo systemctl disable php7.0-fpm.service
sudo systemctl disable memcached.service
Também criei um arquivo para automatizar o gerenciamento do lemp. Ele é bem simples e serve apenas para mostrar informações sobre versões dos softwares, iniciar, reiniciar, parar e adicionar novos virtual hosts:
- /usr/local/bin/lemp
-
#!/bin/bash # Author: Natan Felles <natanfelles@gmail.com> # Description: Easy LEMP Management # Local: /usr/local/bin/lemp # Default color COLOR0=$(tput sgr0) # Red COLOR1=$(tput setaf 1) # Green COLOR2=$(tput setaf 2) # Yellow COLOR3=$(tput setaf 3) # Blue COLOR4=$(tput setaf 4) # Check if is super-user if [ $(id -u) != '0' ]; then echo "${COLOR1}You must be root to run this script.${COLOR0}"; exit 1; fi # Get Website owner username user_func(){ echo -n "${COLOR2}Website owner username:${COLOR0} " read USER # Root path where domain folders wil be created #ROOT=/var/www/${USER} # Custom root path ROOT=/home/${USER}/Websites/ } # Start Services start_func(){ /etc/init.d/nginx start; /etc/init.d/php7.0-fpm start; /etc/init.d/mysql start; /etc/init.d/memcached start; } # Stop Services stop_func(){ /etc/init.d/nginx stop; /etc/init.d/php7.0-fpm stop; /etc/init.d/mysql stop; /etc/init.d/memcached stop; } # Restart Services restart_func(){ /etc/init.d/nginx restart; /etc/init.d/php7.0-fpm restart; /etc/init.d/mysql restart; /etc/init.d/memcached restart; } # Add Virtual Host add_func(){ user_func echo -n "${COLOR2}Domain to Add:${COLOR0} " read DOMAIN FILE="/etc/nginx/sites-available/${DOMAIN}.conf" if [ -f "${FILE}" ]; then echo "${COLOR1}This domain already exists.${COLOR0}" exit else BASE=${ROOT}${DOMAIN}/ mkdir -p ${BASE} PUBLIC=${BASE}public/ mkdir -p ${PUBLIC} INDEX="${PUBLIC}index.php" touch ${INDEX} echo "<?= \"${DOMAIN} is live!\";" > ${INDEX} chown -R ${USER}:${USER} ${BASE} CONFIG=" server { ## Default port listen 80; ## SSL configuration listen 443 ssl; include snippets/snakeoil.conf; ## Show folders contents autoindex on; ## Public filesystem Path root ${PUBLIC}; ## Index files index index.php index.html; ## Domains server_name ${DOMAIN} www.${DOMAIN}; ## Enable URL Rewrite in Web Root location / { try_files \$uri \$uri/ /index.php?\$args; } ## Pass the PHP scripts to PHP-FPM Socket location ~ \\.php\$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.0-fpm.sock; } ## Deny access to hidden files location ~ /\\. { deny all; } ## Permit files to be accessed from other domains # add_header Access-Control-Allow-Origin \"*\"; # Can be a domain ## Cache # location ~* \.(ico|jpg|jpeg|png|gif|svg|js|css|swf|eot|ttf|otf|woff|woff2)$ { # add_header Cache-Control \"public\"; # add_header X-Frame-Options \"SAMEORIGIN\"; # expires +1y; # } ## Serve static files directly # location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt)$ { # access_log off; # } ## Force SSL # if (\$scheme != \"https\") { # rewrite ^ https://${DOMAIN}\$request_uri? permanent; # } # Force www # if (\$http_host != \"www.${DOMAIN}\") { # rewrite ^ \$scheme://www.${DOMAIN}\$request_uri? permanent; # } ## Disable log and allow robots location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } } " touch ${FILE} echo "${CONFIG}" > ${FILE} ln -s ${FILE} /etc/nginx/sites-enabled/${DOMAIN}.conf /etc/init.d/nginx restart >> /dev/null echo "" echo "${COLOR4}Info:${COLOR0}" echo "Add the following line in /etc/hosts:" echo "${COLOR3}127.0.0.1 ${DOMAIN} www.${DOMAIN}${COLOR0}" echo "After you can access your site in http://${DOMAIN}" echo "The local path is ${BASE}" fi } delete_func(){ echo -n "${COLOR2}Domain to Delete:${COLOR0} " read DOMAIN rm "/etc/nginx/sites-available/${DOMAIN}.conf" rm "/etc/nginx/sites-enabled/${DOMAIN}.conf" /etc/init.d/nginx restart >> /dev/null echo "" echo "${COLOR4}Info:${COLOR0}" echo "Your web files was not removed. Just the vhost config." echo "Delete the following line in /etc/hosts:" echo "${COLOR3}127.0.0.1 ${DOMAIN} www.${DOMAIN}${COLOR0}" } info_func(){ echo -n "${COLOR2}Linux: ${COLOR0}" uname -a echo -n "${COLOR2}Nginx: ${COLOR0}" nginx -v echo -n "${COLOR2}MySQL: ${COLOR0}" mysql -V echo -n "${COLOR2}PHP: ${COLOR0}" php -v } case "$1" in start ) start_func ;; stop ) stop_func ;; restart ) restart_func ;; add ) add_func ;; delete ) delete_func ;; info ) info_func ;; * ) echo "Options: {start|stop|restart|add|delete|info}"; esac
Você pode executar esse arquivo de qualquer local ou, preferencialmente, salve-o em /usr/local/bin/lemp então poderá usá-lo com a seguinte sintaxe:
lemp start
Digite apenas lemp para ver os possíveis parâmetros.
Primeiro Virtual Host
Para criar seu primeiro site local, execute o seguinte comando:
lemp add
O script será executado e irá lhe pedir um domínio: Domain to Add:
Adicione o domínio que quiser, por exemplo: domain.tld ou meusite.local. Pressione enter e depois aponte o domínio para 127.0.0.1 conforme lhe será instruído no decorrer do script. Depois, reinicie o lemp com lemp restart
.
Será criada uma pasta em /var/www e os arquivos de configuração /etc/nginx/sites-*.
É isso. Caso não tenha entendido alguma coisa; entre em contato ou pesquise. Acredito que esse artigo poderá lhe facilitar para desenvolver para web daqui para a frente.
Nota
Desde que criei esse script vinha tendo problemas ao atualizar o MySQL via apt
. O gerenciador não conseguia fazer upgrade do pacote para uma nova versão e o mantinha na mesma.
Caso isso aconteça com você, a solução é bem simples: basta habilitar o MySQL pelo systemctl
:
sudo systemctl enable mysql.service
Depois, faça o upgrade do pacote e desabilite a inicialização automática do banco de dados, se quiser.
sudo apt update
sudo apt upgrade
sudo apt -f install
sudo systemctl disable mysql.service
O que acha de me comprar um café? Comprar um café